<?php

namespace App\Http\Controllers;
use App\Http\Requests\RegistRequest;
use App\Mail\RegistMail;
use App\User;
use Illuminate\Http\Request;
use Validator;
use Mail;
class Regist extends Controller
{
    /**
     * 加载注册模板
     */
    public function regist(){
        //加载注册模板
        return view('regist');
    }

    /**
     * 验证注册
     * @param Request $request
     */
    public function store(Request $request,RegistRequest $registRequest){
       //  // 用$request对象来获取post请求的数据
       //  $post=$request->all();
       //  // dd($post);
       //  // 使用框架提供的验证类，来创建和定义的一个验证方法
       //  $validator = Validator::make($post,[
       //      'name' => 'required',
       //      'email' => 'required|email',
       //      'password' => 'required|between:6,20|confirmed',
       //      'password_confirmation' => 'required|between:6,20',
       // ]);
       //  // 如果检测有错误返回为真，代表至少有一验证不满足，这个时候就该提示错误信息，并且返回
       //  if ($validator->fails()){
       //      //如果跳转的时候直接写路由规则,就在redirect方法内传递路由规则参数,
       //      //如果想使用路由别名来调用路由,
       //      //在redirect()方法内不传参数,后面继续链式调用route方法来指定路由名字跳转
       //      //  return redirect('/regist');
       //      return redirect('/regist')->withErrors($validator);
       // }
         // 将数据直接存入到数据库中
         $post=$request->all();
        //laravel框架默认不允许一次性给一条数据添加多个字段值,
        //将post数据中的password加密
        $post['password']=bcrypt($post['password']);
        // 往post数据中添加一个email_token随机字符串的值
        $post['email_token']=str_random(10);
        // create方法会将新添加的数据返回来
        $user=User::create($post);
        // dd($user);
        //到这一步为止，算是注册账号成功，这时候就要发给用户邮件信息了
       // Mail类的to方法是指定发送给谁，这里需要给的是一个数据对象，
        //注意的是，to的数据对象里面必须包含email字段
        //send()方法里面需要new 你用什么邮件类来给谁发送什么邮件
        Mail::to($user)->send(new RegistMail($user['email_token']));
        //设置闪存信息
        session()->flash('success','注册成功!!邮件发送至注册的邮箱,请去激活账号');
        //返回前台首页,
        return redirect('/');
    }

    public function jihuo($token){
        // 如果数据库里面的email_token等于注册的$token（就是随机的email_token）
        // where()方法参数 第一个参数是表中那个字段，第二个参数是判断条件，= !=
        //第三个参数是需要的判断的值，如果判断条件是等于号，那么可以省略不写
         $user=User::where('email_token','=',$token)->first();
         // 将找到的用户数据改为1
         if($user){
             // 能找到数据才能进行更改
             $user->status=1;
             // 将数据保存一下
             $user->save();
             //如果想激活账号之后自动帮用户登录,直接调用方法
             \Auth::login($user);
             //设置闪存信息,并跳转到首页
             session()->flash('success','账号激活成功');
             return redirect('/');
         }
            //如果找不到账号,运行这里
            session()->flash('danger','账号不存在');
            return redirect('/');
    }
}
